export interface Task {
  id: string;
  title: string;
  description: string;
  story: string; // 故事背景
  scenario: string; // 场景描述
  category: 'create' | 'read' | 'update' | 'delete';
  difficulty: 'beginner' | 'intermediate' | 'advanced';
  experience: number;
  steps: TaskStep[];
  hints: string[];
  solution?: string;
  successMessage?: string; // 完成任务的祝贺语
}

export interface TaskStep {
  id: string;
  instruction: string;
  type: 'index' | 'document' | 'query' | 'update' | 'delete';
  validation?: {
    endpoint?: string;
    method?: string;
    expectedResult?: any;
  };
}

export const tasks: Task[] = [
  // ========== CREATE 任务 ==========
  {
    id: 'create-1',
    title: '🏰 建立魔法图书馆',
    description: '欢迎来到 ElastiQuest 的世界！你是一位年轻的数据魔法师，第一个任务是建立自己的魔法图书馆。',
    story: '在遥远的数据王国，每位魔法师都需要一个属于自己的魔法图书馆来存储知识。图书馆就像 Elasticsearch 中的索引，是存储和组织信息的基础。',
    scenario: '📚 你站在空旷的魔法塔中，需要施展创建咒语来建立你的第一个图书馆。这个图书馆将用来存储你在冒险中收集的各种魔法书籍和卷轴。',
    category: 'create',
    difficulty: 'beginner',
    experience: 10,
    steps: [
      {
        id: 'create-1-step-1',
        instruction: '使用创建咒语建立一个名为 "magic_library" 的图书馆',
        type: 'index',
        validation: {
          endpoint: '/magic_library',
          method: 'HEAD',
        },
      },
    ],
    hints: [
      '💡 创建咒语的格式是: PUT /图书馆名称',
      '📝 图书馆名称必须使用小写字母和下划线',
      '✨ 试试: PUT /magic_library',
    ],
    solution: 'PUT /magic_library',
    successMessage: '🎉 恭喜！你成功建立了第一个魔法图书馆！现在你可以开始收集魔法书籍了。',
  },
  {
    id: 'create-2',
    title: '📖 收录第一本魔法书',
    description: '你的图书馆已经建好了，现在需要收录第一本魔法书！',
    story: '一位神秘的旅行者来到你的魔法塔，他愿意捐赠一本珍贵的魔法书。这本书记录了一位传奇魔法师的信息。',
    scenario: '🧙‍♂️ 旅行者递给你一本古老的魔法书，封面上写着魔法师的名字和年龄。你需要将这些信息记录到图书馆中，以便日后查阅。',
    category: 'create',
    difficulty: 'beginner',
    experience: 15,
    steps: [
      {
        id: 'create-2-step-1',
        instruction: '在 "magic_library" 图书馆中收录一本魔法书，记录魔法师的姓名(name)和年龄(age)',
        type: 'document',
        validation: {
          endpoint: '/magic_library/_doc/1',
          method: 'GET',
        },
      },
    ],
    hints: [
      '💡 收录魔法书使用: POST /magic_library/_doc',
      '📝 魔法书的信息用 JSON 格式记录',
      '✨ 格式: {"name": "梅林", "age": 150}',
      '🎯 你也可以指定书籍编号: PUT /magic_library/_doc/1',
    ],
    solution: 'POST /magic_library/_doc\n{\n  "name": "梅林",\n  "age": 150,\n  "title": "时间魔法入门"\n}',
    successMessage: '📚 太棒了！你成功收录了第一本魔法书。魔法师梅林的信息已经安全地存储在图书馆中了！',
  },
  {
    id: 'create-3',
    title: '🎒 整理冒险者背包',
    description: '一群冒险者带来了许多魔法物品，你需要快速将它们全部登记入库！',
    story: '冒险者公会的成员们刚从地下城归来，他们带回了大量的魔法装备和道具。作为图书馆管理员，你需要快速记录这些物品。',
    scenario: '⚔️ 三位冒险者站在你面前，每人手中都拿着一件珍贵的魔法物品。他们急着去接下一个任务，希望你能快速完成登记。使用批量登记咒语可以大大提高效率！',
    category: 'create',
    difficulty: 'intermediate',
    experience: 25,
    steps: [
      {
        id: 'create-3-step-1',
        instruction: '使用批量登记咒语，一次性将三件魔法物品记录到 "magic_items" 仓库中',
        type: 'document',
      },
    ],
    hints: [
      '💡 批量登记咒语: POST /_bulk',
      '📝 每件物品需要两行：第一行说明操作，第二行是物品信息',
      '✨ 操作行格式: {"index":{"_index":"magic_items"}}',
      '🎯 物品信息示例: {"name":"火焰之剑","power":100,"rarity":"稀有"}',
      '⚠️ 注意：每行都是独立的 JSON，不要用逗号连接',
    ],
    solution: 'POST /_bulk\n{"index":{"_index":"magic_items"}}\n{"name":"火焰之剑","power":100,"rarity":"稀有"}\n{"index":{"_index":"magic_items"}}\n{"name":"冰霜法杖","power":85,"rarity":"史诗"}\n{"index":{"_index":"magic_items"}}\n{"name":"治愈药水","power":50,"rarity":"普通"}',
    successMessage: '⚡ 完美！你熟练地使用批量登记咒语，三件魔法物品瞬间就被记录完毕。冒险者们对你的效率赞不绝口！',
  },

  // ========== READ 任务 ==========
  {
    id: 'read-1',
    title: '🔍 寻找失落的魔法书',
    description: '一位学徒忘记了某本魔法书的位置，但他记得书籍的编号。帮他找到这本书！',
    story: '一位年轻的魔法学徒慌慌张张地跑来，他说导师要求他研读编号为 1 的魔法书，但图书馆太大了，他找不到具体位置。',
    scenario: '📚 学徒递给你一张纸条，上面写着书籍编号 "1"。你需要使用查询咒语，从 "magic_library" 中精确找到这本书的详细信息。',
    category: 'read',
    difficulty: 'beginner',
    experience: 10,
    steps: [
      {
        id: 'read-1-step-1',
        instruction: '使用查询咒语从 "magic_library" 中找到编号为 1 的魔法书',
        type: 'query',
        validation: {
          endpoint: '/magic_library/_doc/1',
          method: 'GET',
        },
      },
    ],
    hints: [
      '💡 查询咒语格式: GET /图书馆名/_doc/书籍编号',
      '✨ 试试: GET /magic_library/_doc/1',
    ],
    solution: 'GET /magic_library/_doc/1',
    successMessage: '🎯 找到了！学徒激动地接过书籍信息，连声道谢后匆匆离去。',
  },
  {
    id: 'read-2',
    title: '📋 图书馆藏书清点',
    description: '馆长要求你清点图书馆的所有藏书，生成一份完整的书籍清单。',
    story: '年度审计时间到了！馆长需要一份完整的藏书清单来向魔法议会汇报。',
    scenario: '📊 馆长站在你面前，手持羽毛笔和羊皮纸，等待你施展搜索咒语，列出图书馆中的所有魔法书籍。',
    category: 'read',
    difficulty: 'beginner',
    experience: 15,
    steps: [
      {
        id: 'read-2-step-1',
        instruction: '使用搜索咒语列出 "magic_library" 中的所有书籍',
        type: 'query',
      },
    ],
    hints: [
      '💡 搜索所有书籍: GET /图书馆名/_search',
      '📝 可以添加 ?size=100 来显示更多结果',
      '✨ 试试: GET /magic_library/_search',
    ],
    solution: 'GET /magic_library/_search',
    successMessage: '📜 完美！馆长满意地点点头，开始在羊皮纸上记录书籍信息。',
  },
  {
    id: 'read-3',
    title: '🔮 寻找特定魔法师的著作',
    description: '一位研究者想要找到所有与"梅林"相关的魔法书籍。',
    story: '一位魔法历史学家正在研究传奇魔法师梅林的生平，他需要找到所有与梅林相关的书籍和记录。',
    scenario: '🧙‍♂️ 研究者告诉你，他对任何提到"梅林"名字的书籍都感兴趣。你需要使用高级搜索咒语，在图书馆中找出所有相关的书籍。',
    category: 'read',
    difficulty: 'intermediate',
    experience: 20,
    steps: [
      {
        id: 'read-3-step-1',
        instruction: '在 "magic_library" 中搜索所有 name 字段包含 "梅林" 的书籍',
        type: 'query',
      },
    ],
    hints: [
      '💡 使用匹配查询: POST /magic_library/_search',
      '📝 请求体格式: {"query": {"match": {"字段名": "搜索词"}}}',
      '✨ 字段名是 name，搜索词是 "梅林"',
    ],
    solution: 'POST /magic_library/_search\n{\n  "query": {\n    "match": {\n      "name": "梅林"\n    }\n  }\n}',
    successMessage: '🎓 太好了！研究者兴奋地查看搜索结果，这些资料对他的研究非常有帮助！',
  },

  // ========== UPDATE 任务 ==========
  {
    id: 'update-1',
    title: '🎂 魔法师的生日',
    description: '今天是梅林的生日！他又长了一岁，需要更新他的年龄信息。',
    story: '魔法塔里传来欢快的音乐，大家正在为梅林庆祝生日。作为图书馆管理员，你需要更新他的年龄记录。',
    scenario: '🎉 梅林笑着说："我又老了一岁啊！"你需要在图书馆记录中将他的年龄从 150 更新为 151。',
    category: 'update',
    difficulty: 'beginner',
    experience: 15,
    steps: [
      {
        id: 'update-1-step-1',
        instruction: '将 "magic_library" 中编号为 1 的魔法师的 age 更新为 151',
        type: 'update',
      },
    ],
    hints: [
      '💡 更新咒语: POST /magic_library/_update/1',
      '📝 请求体格式: {"doc": {"age": 151}}',
      '✨ 只更新 age 字段，其他信息保持不变',
    ],
    solution: 'POST /magic_library/_update/1\n{\n  "doc": {\n    "age": 151\n  }\n}',
    successMessage: '🎂 完成！梅林的年龄已经更新。他开心地吹灭了蜡烛。',
  },
  {
    id: 'update-2',
    title: '📧 建立魔法通讯录',
    description: '魔法议会要求所有魔法师登记联系方式，你需要为梅林添加魔法邮箱地址。',
    story: '魔法议会发布了新规定：所有注册魔法师必须提供魔法邮箱地址，以便接收重要通知。',
    scenario: '✉️ 梅林递给你一张卡片，上面写着他的魔法邮箱地址。你需要将这个信息添加到他的档案中。',
    category: 'update',
    difficulty: 'beginner',
    experience: 15,
    steps: [
      {
        id: 'update-2-step-1',
        instruction: '为 "magic_library" 中编号为 1 的魔法师添加 email 字段',
        type: 'update',
      },
    ],
    hints: [
      '💡 使用更新咒语添加新字段',
      '📝 格式: {"doc": {"email": "merlin@magic.com"}}',
      '✨ 新字段会自动添加，不影响现有信息',
    ],
    solution: 'POST /magic_library/_update/1\n{\n  "doc": {\n    "email": "merlin@magic.com"\n  }\n}',
    successMessage: '📬 完成！梅林的魔法邮箱已经登记。他现在可以接收魔法议会的通知了。',
  },
  {
    id: 'update-3',
    title: '⚡ 魔法力量提升',
    description: '梅林完成了一次艰苦的修炼，他的魔法力量增强了！使用魔法脚本来提升他的能力值。',
    story: '梅林刚从禁地修炼归来，他的魔法力量得到了显著提升。你需要使用高级魔法脚本来更新他的能力值。',
    scenario: '✨ 梅林浑身散发着强大的魔法气息，他说："我感觉我的魔法力量增加了 10 点！"你需要使用脚本咒语来自动计算并更新他的 power 值。',
    category: 'update',
    difficulty: 'intermediate',
    experience: 25,
    steps: [
      {
        id: 'update-3-step-1',
        instruction: '使用脚本将 "magic_library" 中编号为 1 的魔法师的 power 增加 10',
        type: 'update',
      },
    ],
    hints: [
      '💡 使用脚本更新: POST /magic_library/_update/1',
      '📝 脚本格式: {"script": {"source": "ctx._source.power += 10"}}',
      '✨ ctx._source 代表当前文档，可以直接修改字段',
      '⚠️ 如果 power 字段不存在，需要先添加',
    ],
    solution: 'POST /magic_library/_update/1\n{\n  "script": {\n    "source": "ctx._source.power += 10"\n  }\n}',
    successMessage: '⚡ 太棒了！梅林的魔法力量已经提升。他感激地向你点头致意。',
  },

  // ========== DELETE 任务 ==========
  {
    id: 'delete-1',
    title: '🗑️ 清理损坏的魔法书',
    description: '一本魔法书在实验中被损坏了，需要从图书馆中移除。',
    story: '一位学徒在练习火焰魔法时不小心烧毁了一本书。这本书已经无法修复，必须从图书馆记录中删除。',
    scenario: '🔥 学徒愧疚地低着头，手里拿着一本烧焦的书籍残骸。书籍编号是 999。你需要将这本书从图书馆记录中移除。',
    category: 'delete',
    difficulty: 'beginner',
    experience: 10,
    steps: [
      {
        id: 'delete-1-step-1',
        instruction: '从 "magic_library" 中删除编号为 999 的损坏书籍',
        type: 'delete',
      },
    ],
    hints: [
      '💡 删除咒语: DELETE /图书馆名/_doc/书籍编号',
      '✨ 试试: DELETE /magic_library/_doc/999',
      '⚠️ 删除操作不可恢复，请确认编号正确',
    ],
    solution: 'DELETE /magic_library/_doc/999',
    successMessage: '🗑️ 已删除。学徒松了一口气，承诺以后会更加小心。',
  },
  {
    id: 'delete-2',
    title: '📜 清理过期的魔法卷轴',
    description: '魔法卷轴有保质期！所有超过 200 年的古老卷轴都已经失效，需要批量清理。',
    story: '图书馆管理条例规定，超过 200 年的魔法卷轴会失去魔力，必须定期清理以节省空间。',
    scenario: '⏰ 馆长通知你，今天是季度清理日。你需要找出所有 age 大于 200 的魔法师记录（这些是古老的过期卷轴），并将它们全部删除。',
    category: 'delete',
    difficulty: 'intermediate',
    experience: 20,
    steps: [
      {
        id: 'delete-2-step-1',
        instruction: '删除 "magic_library" 中所有 age 大于 200 的记录',
        type: 'delete',
      },
    ],
    hints: [
      '💡 按条件删除: POST /magic_library/_delete_by_query',
      '📝 使用范围查询: {"query": {"range": {"age": {"gt": 200}}}}',
      '✨ gt 表示 greater than（大于）',
    ],
    solution: 'POST /magic_library/_delete_by_query\n{\n  "query": {\n    "range": {\n      "age": {"gt": 200}\n    }\n  }\n}',
    successMessage: '🧹 清理完成！图书馆腾出了不少空间，可以收藏更多新的魔法书了。',
  },
  {
    id: 'delete-3',
    title: '💥 摧毁黑魔法图书馆',
    description: '发现了一个存储黑魔法的秘密图书馆！为了安全，必须将整个图书馆彻底摧毁。',
    story: '魔法议会的调查员发现了一个名为 "dark_magic" 的秘密图书馆，里面存储着危险的黑魔法知识。议会下令立即销毁！',
    scenario: '⚠️ 这是一个危险的任务！你需要施展最强大的毁灭咒语，将整个 "dark_magic" 图书馆及其所有内容彻底删除。记住：这个操作不可逆转！',
    category: 'delete',
    difficulty: 'beginner',
    experience: 10,
    steps: [
      {
        id: 'delete-3-step-1',
        instruction: '删除整个 "dark_magic" 图书馆',
        type: 'delete',
      },
    ],
    hints: [
      '💡 删除整个图书馆: DELETE /图书馆名',
      '⚠️ 这会删除图书馆和所有书籍，无法恢复！',
      '✨ 试试: DELETE /dark_magic',
    ],
    solution: 'DELETE /dark_magic',
    successMessage: '💥 轰！黑魔法图书馆化为灰烬。魔法议会对你的果断行动表示赞赏！',
  },
];

// 按类别分组任务
export const tasksByCategory = {
  create: tasks.filter(t => t.category === 'create'),
  read: tasks.filter(t => t.category === 'read'),
  update: tasks.filter(t => t.category === 'update'),
  delete: tasks.filter(t => t.category === 'delete'),
};

// 按难度分组任务
export const tasksByDifficulty = {
  beginner: tasks.filter(t => t.difficulty === 'beginner'),
  intermediate: tasks.filter(t => t.difficulty === 'intermediate'),
  advanced: tasks.filter(t => t.difficulty === 'advanced'),
};

